# 需求说明：
# 1. 获取验证码： http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=verify
# 2. 登录： http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=do_login
# 3. 断言：status_code, status, msg
#
# 实现要求：
# 1. 按照功能模块组织测试类，一条测试用例对应一个测试方法
# 2. 添加断言：响应状态码/success/code/message
# 3. 封装测试套件批量执行用例
# 4. 生成测试报告

# 导包
import requests


# 创建测试类
class TestLoginAPI:
    # 前置处理
    def setup(self):
        # 创建session对象
        self.session = requests.session()

    # 后置处理
    def teardown(self):
        # 关闭session对象
        self.session.close()

    # 登录成功
    def test01_login_success(self):
        # 需要使用session对象处理两个请求之前的cookies数据
        # 获取图片验证码
        # 1. 获取验证码： http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=verify
        # 2. 登录： http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=do_login
        response = self.session.get("http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=verify")
        print(response.status_code)
        # 断言响应状态码为200
        assert response.status_code == 200
        # 打印响应头信息
        print(response.headers)
        # 打印响应头中的Content-Type
        print(response.headers.get("Content-Type"))
        # 断言响应头中的Content-Type包含【image】
        assert "image" in response.headers.get("Content-Type")

        # 登录成功
        url = "http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=do_login"
        login_data = {
            "username": "13488888888",
            "password": "123456",
            "verify_code": "8888"
        }
        response = self.session.post(url=url, data=login_data)
        print(response.json())

        # 断言响应状态码为200
        assert response.status_code == 200
        # 断言返回json数据中的status值为1
        assert response.json().get("status") == 1
        # 断言返回json数据中的msg值为[登陆成功]
        assert response.json().get("msg") == "登陆成功"

    # 账号不存在
    def test02_username_not_exist(self):
        # 需要使用session对象处理两个请求之前的cookies数据
        # 获取图片验证码
        # 1. 获取验证码： http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=verify
        # 2. 登录： http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=do_login
        response = self.session.get("http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=verify")
        print(response.status_code)
        # 断言响应状态码为200
        assert response.status_code == 200
        # 打印响应头信息
        print(response.headers)
        # 打印响应头中的Content-Type
        print(response.headers.get("Content-Type"))
        # 断言响应头中的Content-Type包含【image】
        assert "image" in response.headers.get("Content-Type")

        # 登录成功
        url = "http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=do_login"
        login_data = {
            "username": "13411335577",
            "password": "123456",
            "verify_code": "8888"
        }
        response = self.session.post(url=url, data=login_data)
        print(response.json())

        # 断言响应状态码为200
        assert response.status_code == 200
        # 断言返回json数据中的status值为-1
        assert response.json().get("status") == -1
        # 断言返回json数据中的msg值为[账号不存在!]
        assert response.json().get("msg") == "账号不存在!"

    # 密码错误
    def test03_password_error(self):
        # 需要使用session对象处理两个请求之前的cookies数据
        # 获取图片验证码
        # 1. 获取验证码： http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=verify
        # 2. 登录： http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=do_login
        response = self.session.get("http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=verify")
        print(response.status_code)
        # 断言响应状态码为200
        assert response.status_code == 200
        # 打印响应头信息
        print(response.headers)
        # 打印响应头中的Content-Type
        print(response.headers.get("Content-Type"))
        # 断言响应头中的Content-Type包含【image】
        assert "image" in response.headers.get("Content-Type")

        # 登录成功
        url = "http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=do_login"
        login_data = {
            "username": "13488888888",
            "password": "123457",
            "verify_code": "8888"
        }
        response = self.session.post(url=url, data=login_data)
        print(response.json())

        # 断言响应状态码为200
        assert response.status_code == 200
        # 断言返回json数据中的status值为-2
        assert response.json().get("status") == -2
        # 断言返回json数据中的msg值为[密码错误!]
        assert response.json().get("msg") == "密码错误!"

